home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
MACD 5
/
MACD 5.bin
/
workbench
/
wb
/
czesc_4
/
viruscheck
/
checkarc1_10.lha
/
CheckArcFr.vzrx
< prev
next >
Wrap
Text File
|
1996-10-24
|
11KB
|
270 lines
/*
$VER: CheckArcFr.vzrx 1.1 (24.10.96)
© 1996 par Jean-Philippe MISTROT
*/
Trace OFF
/* Programmes externes */
Prog_VirusZ = 'UTILITAIRES:SHAREWARE/VIRUSZ/VirusZ'
Prog_Lha = 'C:Lha'
Prog_Lzx = 'C:Lzx'
Prog_Dms = 'C:Dms' /* Une version enregistrée est nécessaire pour la gestion des erreurs physiques */
Prog_Zip = 'C:Unzip'
Prog_Rar = 'C:Unrar'
/* Fichiers indispensables à CheckArcFr.vzrx */
ListeProbleme = 'RAM:CheckArc.BadArchives'
Liste1 = 'RAM:CheckArc.ListeArchives1'
Liste2 = 'RAM:CheckArc.ListeArchives2'
SortieDMS = 'RAM:CheckArc.SortieDMS'
/* Initialisations de variables */
TempPath = 'T:CheckArcTMP' /* CE CHEMIN SERA EFFACE RECURSIVEMENT A LA FIN DU SCRIPT */
TempPath2 = 'blabla'
TempPathDMS = 'RAD1:'
UseQuitFlag = 'no'
NomParDefaut = 'ListeProblèmes'
Symbole = '32m->31m'
AddLib('rexxreqtools.library',5,-30)
IF rc = 0 THEN DO
SAY 'Veuillez vous procurer la RexxReqTools.library...'
EXIT
END
AddLib('rexxsupport.library',5,-30)
IF rc = 0 THEN DO
SAY 'Veuillez vous procurer la RexxSupport.library...'
EXIT
END
IF Right(TempPath,1) = ':' THEN DO
SAY 'Veuillez spécifier un répertoire temporaire.'
SAY ''TempPath', ne suffit pas !!!'
EXIT
END
IF Length(Symbole) > 29 | Length(Symbole) < 1 THEN DO
SAY 'Le symbole doit posséder de 1 à 29 caractères inclus !!!'
EXIT
END
IF Right(TempPath,1) = '/' THEN TempPath = DelStr(TempPath,Length(TempPath))
PARSE ARG Argument
IF Argument = '' THEN DO
Choix = rtezrequest('Que voulez-vous vérifier ?','Répertoire|Archive')
IF Choix = 1 THEN Argument = rtfilerequest(,,'Selectionnez un répertoire...',,'rtfi_flags = freqf_nofiles')
ELSE Argument = rtfilerequest(,,'Selectionnez une archive...',,'rtfi_flags = freqf_patgad rtfi_matchpat = (#?.lha|#?.lzh|#?.lzx|#?.run|#?.dms|#?.zip|#?.rar)')
END
IF rtresult = 0 THEN EXIT
IF Pos('"',Argument) ~= 0 THEN Argument = COMPRESS(Argument,'"')
IF ~Exists(Argument) THEN DO
SAY 'L''argument transmis est incorrect !!!'
EXIT
END
IF SubStr(STATEF(Argument),1,3) = 'DIR' THEN DO
ADDRESS command 'C:List >"'Liste2'" "'Argument'" P=(*.lha|*.lzh|*.lzx|*.dms|*.run|*.zip|*.rar) FILES LFORMAT "%P%S" ALL'
IF rc ~= 0 THEN DO
SAY 'Un problème est survenu durant la création de la liste !!!'
EXIT
END
END
ELSE DO
IF Right(UPPER(Argument),4) = '.LHA' | Right(UPPER(Argument),4) = '.LZH' | Right(UPPER(Argument),4) = '.LZX' | Right(UPPER(Argument),4) = '.DMS' | Right(UPPER(Argument),4) = '.RUN' | Right(UPPER(Argument),4) = '.ZIP' | Right(UPPER(Argument),4) = '.RAR' THEN DO
ArcToCheck = Argument
CALL Recursivite
CALL DeleteTemp
CALL QuitVirusZ
END
SAY 'Utilisation : Rx CheckArcFr.vzrx (ARC|CHEMIN)'
EXIT
END
IF SubStr(STATEF(Liste2),6,1) = '0' THEN DO
SAY 'Votre chemin ne contient pas d''archive !!!'
ADDRESS command 'C:Delete >NIL: "'Liste2'" QUIET'
EXIT
END
ADDRESS command 'C:Sort >NIL: "'Liste2'" "'Liste2'"'
Open('Liste2',Liste2,'R')
DO WHILE ~eof('Liste2')
ArcToCheck = ReadLn('Liste2')
IF ArcToCheck ~= '' THEN DO
TempPath2 = 'blabla'
CALL Recursivite
CALL DeleteTemp
END
END
Close('Liste2')
ADDRESS command 'C:Delete >NIL: "'Liste2'" QUIET'
CALL QuitVirusZ
Recursivite:
DO WHILE TempPath2 ~= TempPath
IF ArcToCheck ~= '' THEN CALL Decompresse
IF Pos(TempPath,ArcToCheck) ~= 0 THEN ADDRESS command 'C:Delete >NIL: "'ArcToCheck'" QUIET FORCE'
ADDRESS command 'C:List >"'Liste1'" "'TempPath2'" P=(*.lha|*.lzh|*.lzx|*.dms|*.run|*.zip|*.rar) FILES LFORMAT "%P%S" ALL'
IF rc ~= 0 THEN DO
IF ~exists(ListeProbleme) THEN Open('ListeProbleme',ListeProbleme,'W')
WriteLn('ListeProbleme','ERREUR !!! durant l''examen récursif du répertoire 'TempPath2'')
RETURN
END
Open('Liste1',Liste1,'R')
ArcToCheck = ReadLn('Liste1')
Close('Liste1')
IF ArcToCheck = '' THEN DO
SAY TempPath2
CALL CheckVirus
ADDRESS command 'C:Delete >NIL: "'TempPath2'" ALL QUIET FORCE'
TempPath2 = DelStr(TempPath2,LastPos('/',TempPath2))
END
END
RETURN
CheckVirus:
IF ~show(ports,VIRUSZ_II.REXX) THEN DO
SAY 'Démarrage de VirusZ...'
ADDRESS command '"'Prog_VirusZ'"'
StartTime = Time(seconds)
DO WHILE ~show(ports,VIRUSZ_II.REXX)
IF Time(seconds) - StartTime > 20 THEN DO
SAY 'ERREUR durant le chargement de VirusZ !!!'
EXIT
END
END
END
IF Exists(TempPath2) THEN DO
SAY ' Vérification du contenu de l''archive...'
ADDRESS VIRUSZ_II.REXX CHECKDIR '"'TempPath2'"' DECREXEC DECRDATA
IF rc = 0 THEN SAY ' L''archive est bonne.'
IF rc = 5 THEN DO
IF ~exists(ListeProbleme) THEN Open('ListeProbleme',ListeProbleme,'W')
WriteLn('ListeProbleme','32mVIRUS31m localisé dans 'TempPath2'')
END
IF rc = 10 THEN DO
IF ~exists(ListeProbleme) THEN Open('ListeProbleme',ListeProbleme,'W')
WriteLn('ListeProbleme','ERREUR !!! durant la vérification de l''archive 'TempPath2'')
END
END
RETURN
Decompresse:
IF Pos('/',ArcToCheck) = 0 THEN
IF Pos(':',ArcToCheck) = 0 THEN NomArchive = ArcToCheck
ELSE NomArchive = SubStr(ArcToCheck,Pos(':',ArcToCheck)+1)
ELSE NomArchive = SubStr(ArcToCheck,LastPos('/',ArcToCheck)+1)
IF Length(NomArchive) > 29-Length(Symbole) THEN NomArchive = SubStr(NomArchive,1,29-Length(Symbole))
IF Pos(TempPath,ArcToCheck) = 0 THEN TempPath2 = ''TempPath'/'Symbole''NomArchive''
ELSE TempPath2 = ''SubStr(ArcToCheck,1,LastPos('/',ArcToCheck))''Symbole''NomArchive''
IF Right(UPPER(ArcToCheck),4) = '.LHA' | Right(UPPER(ArcToCheck),4) = '.LZH' | Right(UPPER(ArcToCheck),4) = '.RUN' THEN DO
IF ~EXISTS(TempPath) THEN ADDRESS command 'C:MakeDir >NIL: "'TempPath'"'
ADDRESS command 'C:MakeDir >NIL: "'TempPath2'"'
ADDRESS command '"'Prog_Lha'" >NIL: -M x "'ArcToCheck'" "'TempPath2'/"'
IF rc ~= 0 THEN DO
IF ~exists(ListeProbleme) THEN Open('ListeProbleme',ListeProbleme,'W')
WriteLn('ListeProbleme','ERREUR !!! au cours de l''extraction 'ArcToCheck'')
END
RETURN
END
IF Right(UPPER(ArcToCheck),4) = '.LZX' THEN DO
ADDRESS command '"'Prog_Lzx'" >NIL: x "'ArcToCheck'" "'TempPath2'/"'
IF rc ~= 0 THEN DO
IF ~exists(ListeProbleme) THEN Open('ListeProbleme',ListeProbleme,'W')
WriteLn('ListeProbleme','ERREUR !!! au cours de l''extraction 'ArcToCheck'')
END
RETURN
END
IF Right(UPPER(ArcToCheck),4) = '.DMS' THEN DO
ADDRESS command '"'Prog_Dms'" <NIL: >"'SortieDMS'" WRITE "'ArcToCheck'" TO 'TempPathDms' NOTEXT'
IF rc ~= 0 THEN DO
IF ~exists(ListeProbleme) THEN Open('ListeProbleme',ListeProbleme,'W')
WriteLn('ListeProbleme','ERREUR !!! au cours de l''extraction 'ArcToCheck'')
END
Open('SortieDMS',SortieDMS,'R')
DO WHILE ~eof('SortieDMS')
Ligne = ReadLn('SortieDMS')
IF Pos('READ ERRORS:',Ligne) ~= 0 THEN DO
Compteur1 = Pos(':',Ligne)+3
Compteur2 = Pos(':',Ligne,Compteur1)+3
IF SubStr(Ligne,Compteur1,1) ~= '0' | SubStr(Ligne,Compteur2,1) ~= '0' THEN DO
IF ~exists(ListeProbleme) THEN Open('ListeProbleme',ListeProbleme,'W')
WriteLn('ListeProbleme',''SubStr(Ligne,2)' 'ArcToCheck'')
END
END
END
Close('SortieDMS')
ADDRESS command 'C:Delete >NIL: "'SortieDMS'" QUIET'
IF ~EXISTS(TempPath) THEN ADDRESS command 'C:MakeDir >NIL: "'TempPath'"'
ADDRESS command 'C:MakeDir >NIL: "'TempPath2'"'
ADDRESS command 'C:Copy >NIL: 'TempPathDMS' TO "'TempPath2'" ALL QUIET'
IF rc ~= 0 THEN DO
IF ~exists(ListeProbleme) THEN Open('ListeProbleme',ListeProbleme,'W')
WriteLn('ListeProbleme','ERREUR !!! durant la copie des fichiers de 'TempPathDMS' 'ArcToCheck'')
END
ADDRESS command 'C:Dir >NIL: 'TempPathDMS''
IF rc ~= 0 THEN DO
IF ~exists(ListeProbleme) THEN Open('ListeProbleme',ListeProbleme,'W')
WriteLn('ListeProbleme','Disque non DOS dans le périphérique 'TempPathDMS' 'ArcToCheck'')
END
RETURN
END
IF Right(UPPER(ArcToCheck),4) = '.ZIP' THEN DO
IF ~EXISTS(TempPath) THEN ADDRESS command 'C:MakeDir >NIL: "'TempPath'"'
ADDRESS command '"'Prog_Zip'" >NIL: "'ArcToCheck'" -d "'TempPath2'"'
IF rc ~= 0 THEN DO
IF ~exists(ListeProbleme) THEN Open('ListeProbleme',ListeProbleme,'W')
WriteLn('ListeProbleme','ERREUR !!! au cours de l''extraction 'ArcToCheck'')
END
RETURN
END
IF Right(UPPER(ArcToCheck),4) = '.RAR' THEN DO
ADDRESS command '"'Prog_Rar'" >NIL: x "'ArcToCheck'" "'TempPath2'/"'
IF rc ~= 0 THEN DO
IF ~exists(ListeProbleme) THEN Open('ListeProbleme',ListeProbleme,'W')
WriteLn('ListeProbleme','ERREUR !!! au cours de l''extraction 'ArcToCheck'')
END
END
RETURN
DeleteTemp:
ADDRESS command 'C:Delete >NIL: "'Liste1'" QUIET'
IF Exists(TempPath) THEN DO
SAY ' Effacement du répertoire temporaire...'
ADDRESS command 'C:Delete >NIL: "'TempPath'" ALL QUIET FORCE'
IF rc ~= 0 THEN DO
SAY ' ERREUR durant l''effacement du répertoire temporaire !!!'
CALL QuitVirusZ
END
END
RETURN
QuitVirusZ:
IF UPPER(UseQuitFlag) = 'YES' THEN DO
SAY 'Extinction de VirusZ...'
ADDRESS VIRUSZ_II.REXX QUIT
END
IF Exists(ListeProbleme) THEN DO
Close('ListeProbleme')
Open('ListeProbleme',ListeProbleme,'R')
SAY ''
SAY '*** LISTE DES PROBLÈMES ***'
DO WHILE ~eof('ListeProbleme')
SAY ' 'ReadLn('ListeProbleme')
END
Close('ListeProbleme')
Choix = rtezrequest('Voulez-vous sauver le rapport ?','Oui|Non')
IF Choix = 1 THEN DO
IF Pos('/',Argument) = 0 THEN
IF Pos(':',Argument) = 0 THEN Repertoire = ''
ELSE Repertoire = SubStr(Argument,1,Pos(':',Argument))
ELSE Repertoire = SubStr(Argument,1,LastPos('/',Argument))
Fichier = rtfilerequest(Repertoire,NomParDefaut,'Selectionnez un fichier...')
ADDRESS command 'C:Copy >NIL: "'ListeProbleme'" "'Fichier'"'
END
ADDRESS command 'C:Delete >NIL: "'ListeProbleme'" QUIET'
END
EXIT